草庐IT

C++ 运算符 [] 魔法

全部标签

c++ - 安全调用运算符 - 仅在对象不为空时调用函数

在c++中有没有类似下面的东西:https://kotlinlang.org/docs/reference/null-safety.html#safe-calls我想缩短通话时间,如下所示:intx=0;IPtrpClass(...);if(pClass){pClass->...pClass->...x=pClass->function();}我可以使用任何宏/语言技巧来使它看起来像下面的伪代码吗?IPtrpClass(...);pClass?->...//onlycallfunctionifpClass!=nilpClass?->...//onlycallfunctionifpCla

c++ - 删除 void 指针除了调用全局删除运算符之外还能做些什么?

C++标准非常清楚明确地声明在void指针上使用delete或delete[]是未定义的行为,如引用在thisanswer:Thisimpliesthatanobjectcannotbedeletedusingapointeroftypevoid*becausetherearenoobjectsoftypevoid.但是,据我所知,delete和delete[]只做两件事:调用适当的析构函数调用适当的operatordelete函数,通常是全局函数有一个单参数operatordelete(以及operatordelete[])和thatsingleargumentisvoid*ptr.

c++ - 如何获得忘记算术运算的警告?

考虑这种情况:uint64_tadd(uint32_ta,uint32_tb){returna+b;//programmerneglected(uint64_t)a+b.}我们如何让GCC(或任何其他编译器)的C或C++前端对这种情况发出警告:正在以立即加宽的窄类型执行操作?我通读了当前的GCC文档,并尝试了各种警告,例如-Wconversion,但没有任何效果。 最佳答案 我不知道GCC的标志会引起警告。Coverity静态分析器将发出OVERFLOW_BEFORE_WIDEN警告,因为这已在CERT标准中标记。免责声明:我曾为C

c++ - 关系运算符实现困境

我正在设计几个需要支持运算符的类!=,>,,和>=.这些运营商将在运营商方面实现==和.在这个阶段,我需要在继承¹和强制我的消费者使用std::rel_ops之间做出选择。²“手动”。[1]继承(可能的实现):templateclassRelationalOperatorsImpl{protected:RelationalOperatorsImpl(){}~RelationalOperatorsImpl(){}friendbooloperator!=(constT&lhs,constT&rhs){return!(lhs==rhs);}friendbooloperator>(constT

Python系列(10)—— 逻辑运算符

在Python中,逻辑运算符被用于连接布尔表达式,从而根据这些表达式的真假值来执行相应的操作。Python提供了三种基本的逻辑运算符:and(与)、or(或)和not(非)。1.and运算符and运算符用于连接两个布尔表达式。当两个表达式都为True时,整个表达式的结果才为True。#示例:检查两个条件是否同时满足a=5b=10ifa>3andb15:print("a大于3且b小于15")else:print("至少有一个条件不满足")2.or运算符or运算符也用于连接两个布尔表达式。只要有一个表达式为True,整个表达式的结果就为True。#示例:检查两个条件是否至少满足一个a=5b=5if

C++ 重载 virtual = 运算符

这是我的问题的代码:classICommon{public:virtualICommon&operator=(constICommon&p)const=0;};classCSpecial:publicICommon{public:CSpecial&operator=(constCSpecial&cs)const{//customoperationsreturn*this;}};CSpecialobj;基本上:我希望接口(interface)ICommon强制其后代实现=运算符,但不希望在实现中有任何类型转换。编译器说“无法实例化抽象类。任何帮助/建议将不胜感激。

c++ - 运算符删除不清楚

我是C++的新手,我有一些不清楚的地方:#includeusingnamespacestd;double*foo(void){double*b=newdouble[100];returnb;}intmain(){double*a=foo();delete[]a;return0;}这段代码有问题吗?我的意思是我使用operatordelete的方式是否正确?我把foo函数中指向已分配内存的指针b赋值给foo外的指针a,是否可以在main中通过delete[]a释放内存?我不知道编译器如何计算执行delete[]时要释放的字节数。谢谢 最佳答案

c++ - bitsets 二进制与运算

我写了以下几行:std::bitsetbitvec;//bitset0000std::bitsetaddition;//bitset0000addition.set(0);//settingtheleastsignificantbitstd::cout我希望输出是:000000010010001101000101....但是循环只输出'0000'。我缺少什么基本概念? 最佳答案 逻辑与不是加法。具体而言,0000&0001------=0000这就解释了为什么您总是得到0000。逻辑与只是查看两个位集中的每个位,并且仅当该位在其他两

c++ - 如何将运算符作为默认仿函数参数传递?

为简单起见,假设我想实现一个函数,该函数接受两个参数并判断哪个测试是否相等,templateboolEq(constT&a,constT&b,constTCompare&cmp){returncmp(a,b);}但我还希望如果未传递谓词,则假定operator==。我尝试了几种不同的方法,但都导致了语法错误或“operator==”未定义。我什至尝试用Eq函数替换不过,我想我想要的是可能的,因为STL的大部分支持不传递可选的TCompare参数(std::sort、std::set...)。更新:感谢levis501的建议,这是目前我找到的最好的方法:templateboolEq(co

c++ - 为什么转换不适用于 C++ 中的自定义运算符?

考虑以下代码:classC{public:intoperator-(intx){return3-x;}};classwrapper{public:operatorC(){staticCz;returnz;}}wrap;intmain(){returnwrap-3;}它在g++上给出了这个错误:test.cpp:Infunction‘intmain()’:test.cpp:17:17:error:nomatchfor‘operator-’in‘wrap-3’转换运算符似乎可以工作,因为这个版本可以工作:classwrapper{public:operatorint(){staticint